package com.bage.finance.biz.service;

import com.bage.finance.biz.domain.AssistCalculateSummary;
import com.bage.finance.biz.dto.form.*;
import com.bage.finance.biz.dto.vo.*;
import com.bage.mybatis.help.PageInfo;

import java.util.List;
import java.util.Set;

public interface AssistCalculateSummaryService {
    /**
     * 创建自定义辅助核算
     * @param form
     * @return
     */
    <T extends CreateAssistCalculateForm> Boolean create(T form);

    /**
     * 查询辅助核算列表
     * @param form
     * @param returnType
     * @return
     * @param <R>
     */
    <R extends BaseAssistCalculateVo> PageInfo<R> list(ListAssistCalculateForm form, Class<R> returnType);

    /**
     * 获取辅助核算详情
     * @param id
     * @param returnType
     * @return
     * @param <R>
     */
    <R extends GetAssistCalculateVo> R get(Long id, Class<R> returnType);

    /**
     * 修改辅助核算
     * @param form
     * @return
     * @param <T>
     */
    <T extends UpdateAssistCalculateForm> Boolean update(T form);

    /**
     * 删除辅助核算
     * @param form
     * @return
     */
    Boolean del(DelForm form);

    /**
     * 禁用启用自定义辅助核算
     * @param form
     * @return
     */
    Boolean updateDisable(UpdateDisableForm form);

    /**
     * 通过辅助核算id查询辅助核算列表
     * @param ids
     * @param tenantId
     * @return
     */
    List<AssistCalculateSummary> list(Set<Long> ids, Long tenantId);

    /**
     * 增加辅助核算使用计数
     * @param id
     * @param count
     */
    boolean addUseCount(Long id, int count);

    /**
     * 减少科目使用计数
     * @param id
     * @param count
     */
    boolean deductUseCount(Long id, int count);

    /**
     * 查询辅助核算列表
     * @param form
     * @return
     */
    PageInfo<ListAssistCalculateSummaryVo> list(ListAssistCalculateSummaryForm form);
}
